import librosa
import numpy as np


def get_audio_db_level(audio_path, frame_length=2048):
    """
    计算音频的分贝级别（随时间变化）
    参数:
        audio_path: 音频文件路径
        frame_length: 分析帧长度（默认2048）
    返回:
        db_levels: 各时间点的分贝值数组（单位：dB）
    """
    # 加载音频文件，y为音频信号数组，sr为采样率
    y, sr = librosa.load(audio_path, sr=None)

    # 计算短时傅里叶变换（STFT）
    stft = librosa.stft(y, n_fft=frame_length)

    # 将幅度谱转换为分贝（参考值为最大值）
    db_levels = librosa.amplitude_to_db(np.abs(stft), ref=np.max)

    # 取每帧的平均分贝（可根据需求调整）
    mean_db = np.mean(db_levels, axis=0)

    return mean_db


# 示例使用

db_levels = get_audio_db_level('output1.wav' )
print("分贝序列（前10帧）:", db_levels[:])
print("最大分贝:", np.max(db_levels), "dB")
print("最小分贝:", np.min(db_levels), "dB")